package pl.cezary.butler.walili.common;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.List;
import pl.cezary.butler.walili.server.ServerTask;
import pl.cezary.butler.walili.server.UserId;
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.B8DC870C-9064-1FE4-4C5C-168A84FE5B27]

// </editor-fold> 


public interface IServerFacadeRemote extends Remote{

    public List<Task> processQuery (Query zapytanie) throws RemoteException;

    /**
     * Metoda umozliwiajaca umieszczenie zadania na serwerze
     * @param zadanie Task do wyslania
     */
    public void sendTask (Task zadanie) throws RemoteException;

    /**
     * Metoda pobierajaca z z serwera zadanie do wykonania
     * @return zadanie do wykonania lub null jezeli brak zadania
     */
    public Task getTask () throws RemoteException;

    /**
     * Metoda pobierajaca z z serwera <code>n</code> zadan do wykonania
     * @param n liczba zadan do wykonania
     * @return Lista zadan do wykonania.
     */
    public List<Task> getTasks (int n) throws RemoteException;

    /**
     * Wylogowuje uzytkownika z serwera. Po wywolaniu tej metody obiekt implementujacy interfejs nie nadaje sie juz do uzycia.
     * Zaleca sie ustawienie referencji do tego obiektu na null.
     * Nalezy oczekiwac wyjatkow w czasu wykonania przy probie wykonania jakiejkolwiek innej metody po wylogowaniu.
     */
    public void logout () throws RemoteException;
    
    public void taskDone(Task zad) throws RemoteException;
    
    public void retryFailedTasks() throws RemoteException;
    
    public void retry(Task zad) throws RemoteException;

    public void fillMimeTypes() throws RemoteException;

}

